home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Language/OS - Multiplatform Resource Library
/
LANGUAGE OS.iso
/
oper_sys
/
oasis
/
oasisegs.lha
/
egs
/
quick.lisp
< prev
next >
Wrap
Lisp/Scheme
|
1992-04-23
|
1KB
|
38 lines
(proclaim '(function quick () list))
(proclaim '(function sort (list list) list))
(proclaim '(function partition (list fixnum) list))
(defun run (m)
(declare (type fixnum m))
(do ((j 0 (+ j 1)))
((= j m))
(declare (type fixnum j))
(quick) ))
(defun quick () (sort '(27 74 17 33 94 18 46 83 65 2
32 53 28 85 99 47 28 82 6 11
55 29 39 81 90 37 10 0 66 51
7 21 85 27 31 63 75 4 95 99
11 28 61 74 18 92 40 53 59 8) nil))
(defun sort (unsorted temp)
(declare (type list unsorted)
(type list temp))
(if (null unsorted) temp
(let* ((x (car unsorted))
(pair (partition (cdr unsorted) x)) )
(declare (type fixnum x)
(type list pair) )
(sort (car pair) (cons x (sort (cdr pair) temp))) )))
(defun partition (nums x)
(declare (type list nums)
(type fixnum x))
(if (null nums) '(nil . nil)
(let ((y (car nums))
(pair (partition (cdr nums) x)) )
(declare (type fixnum y)
(type list pair) )
(cond ((<= y x) (cons (cons y (car pair)) (cdr pair)))
((> y x) (cons (car pair) (cons y (cdr pair)))) ))))